package action.admin;

import bdd.ProduitBdd;
import bdd.admin.BddAdminProduitSelectRequest;
import bdd.admin.BddFournisseurSelectRequest;
import service.securite.DroitsAcces;
import service.securite.Erreur;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import bean.produit.Produit;

import bean.compteSpecial.CompteSpecial;

/**
 * Servlet implementation class AdminFournisseurServlet
 */
public class AdminFournisseurAction extends Action {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AdminFournisseurAction() {
        super();
    }

    public static boolean aLesDroits(HttpServletRequest request) {
    	return DroitsAcces.isFournisseur(request);
    }
	
	protected void initSession(HttpServletRequest request )
	{
		HttpSession session = request.getSession();
	}	
	
	public ActionForward execute(final ActionMapping pMapping,
			ActionForm pForm, final HttpServletRequest pRequete,
			HttpServletResponse pReponse) {
		ActionErrors errors = new ActionErrors();
		this.initSession(pRequete);
		
		if (!AdminFournisseurAction.aLesDroits(pRequete)) {
			errors.add("errors",new ActionMessage("errors.dynamic","vous n'avez pas les droits suffisant"));
			saveErrors(pRequete,errors); 
			return (new ActionForward(pMapping.getInput()));
		}
		
		HttpSession session = pRequete.getSession();
		int idFournisseur = 0;
		ArrayList<Produit> listProduits = null;
		ArrayList<CompteSpecial> listFournisseurs = null;
		Produit produit = null;
		int idProduit = 0;
		int isAdmin = 0;
		String fournisseur = "";
		int id_service = (Integer) session.getAttribute("id_service");
		//Superadmin
		if ( DroitsAcces.isAdmin(pRequete) ){
			isAdmin = 1;
			if ( pRequete.getParameter("action") == null ){
				try {
					idFournisseur = (Integer) session.getAttribute("id_service");
					listFournisseurs = BddFournisseurSelectRequest.getListeFournisseurs(idFournisseur);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					errors.add("errors",new ActionMessage("errors.exception"));
					saveErrors(pRequete,errors); 
					return (new ActionForward(pMapping.getInput()));
				}
				pRequete.setAttribute("action", "viewFournisseurs");			
			}
		
			else if ( pRequete.getParameter("action") != null && pRequete.getParameter("action").equals("viewProduits") ){
				idFournisseur = Integer.parseInt(pRequete.getParameter("idFournisseur"));
				try {
					fournisseur = BddFournisseurSelectRequest.getFournisseur(idFournisseur);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					errors.add("errors",new ActionMessage("errors.exception"));
					saveErrors(pRequete,errors); 
					return (new ActionForward(pMapping.getInput()));
				}
				try {
					listProduits = BddAdminProduitSelectRequest.getProduitsFournisseur(idFournisseur,id_service);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					errors.add("errors",new ActionMessage("errors.exception"));
					saveErrors(pRequete,errors); 
					return (new ActionForward(pMapping.getInput()));
				}
				pRequete.setAttribute("action", "viewProduits");
			}
			 
			else if ( pRequete.getParameter("action") != null && pRequete.getParameter("action").equals("viewDetailProduit") ){
				idFournisseur = Integer.parseInt(pRequete.getParameter("idFournisseur"));
				try {
					fournisseur = BddFournisseurSelectRequest.getFournisseur(idFournisseur);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					errors.add("errors",new ActionMessage("errors.exception"));
					saveErrors(pRequete,errors); 
					return (new ActionForward(pMapping.getInput()));
				}
				idProduit = Integer.parseInt(pRequete.getParameter("idProduit"));
				try {
					produit = ProduitBdd.getProduit(idProduit);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					errors.add("errors",new ActionMessage("errors.exception"));
					saveErrors(pRequete,errors); 
					return (new ActionForward(pMapping.getInput()));
				}
				pRequete.setAttribute("action", "viewDetailProduit");
			}
		}
		
		//Fournisseur
		else if ( DroitsAcces.isFournisseur(pRequete) ){
			if ( pRequete.getParameter("action") == null ){
				idFournisseur = Integer.parseInt(session.getAttribute("id_comptespecial").toString());
				try {
					listProduits = BddAdminProduitSelectRequest.getProduitsFournisseur(idFournisseur);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					errors.add("errors",new ActionMessage("errors.exception"));
					saveErrors(pRequete,errors); 
					return (new ActionForward(pMapping.getInput()));
				}
				pRequete.setAttribute("action", "viewProduits");
			}
			else if ( pRequete.getParameter("action").equals("viewDetailProduit") ){
				idProduit = Integer.parseInt(pRequete.getParameter("idProduit"));
				try {
					produit = ProduitBdd.getProduit(idProduit);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					errors.add("errors",new ActionMessage("errors.exception"));
					saveErrors(pRequete,errors); 
					return (new ActionForward(pMapping.getInput()));
				}
				pRequete.setAttribute("action", "viewDetailProduit");
			}
		}
		
		pRequete.setAttribute("listProduits", listProduits);
		pRequete.setAttribute("produit", produit);
		pRequete.setAttribute("isAdmin", Integer.valueOf(isAdmin).toString());
		pRequete.setAttribute("idFournisseur", Integer.valueOf(idFournisseur).toString());
		pRequete.setAttribute("listFournisseurs", listFournisseurs);
		pRequete.setAttribute("fournisseur", fournisseur);
		//String url = "/"+NotreServlet.getDossierAdmin(false)+"fournisseur.jsp";
		//ServletContext context = getServletContext();
		//RequestDispatcher rd = context.getRequestDispatcher(url);
		//rd.forward(request, response);
		return pMapping.findForward("success");
	}
}